FIT2-2023b 第04回 簡単なゲーム
本日のゴール
ボールをキャッチする簡単なゲームを作ってもらいます
https://scrapbox.io/files/63587ae062b3ae002254a98c.mov
前回授業の復習
イベントループ
ゲームの動きをなめらかに実現するための考え方
以下コードでもアニメーションは実現できるが、計算が終わり次第描画されるため「PCが重いとゆっくり動く」「軽いと早く動く」不安定なゲームになってしまう
code:python
import pyxel
pyxel.init(200, 200)
a = 0
while True:
a = a + 1
pyxel.cls(7)
pyxel.circ(a, a, 10, 0)
pyxel.flip()
pyxel.runを利用すれば、update,drawが1/30秒ごとに一定のリズムで実行されるので便利
code:python
import pyxel
a = 0
def update():
global a
a += 1
def draw():
global a
pyxel.circ(a, a, 10, 0)
pyxel.run(update, draw)
gobal宣言
関数内で定義された変数は関数間で共有されないため、以下のコードでは動かない。
global aを各関数の冒頭で書くことで、関数を跨いでも共通の「a」を使えるようになる
code:python
import pyxel
a = 0
def update():
a = a + 1
# エラーになる (aを定義する前に参照しようとしてるよ、と怒られる)
def draw():
pyxel.cls(7)
pyxel.circ(a, a, 10, 0)
pyxel.run(update, draw)
キー入力
code:python
import pyxel
pyxel.init(200, 200)
a = 0
b = 0
c = 0
def update():
global a,b,c
if pyxel.btn(pyxel.KEY_ENTER):
# ENTERキーが押下されている状態であれば以下処理を行う
a += 1
if pyxel.btnp(pyxel.KEY_SPACE):
# スペースキーが押された瞬間だけ以下処理を行う
def draw():
pyxel.run(update, draw)
今回の講義
そろそろ一つ楽をする方法を教えます
pyxel run ファイル名.py を都度terminalに入れてきた
① 情報基礎2の教材ディレクトリに .vscode ディレクトリを作成、中に tasks.json を定義
https://gyazo.com/df196d5106a22f8c8094738b17d0b929
②tasks.jsonの中身を以下の通り定義
code:JSON
{
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "pyxel",
"type": "shell",
"command": "pyxel run ${file}",
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
③cmd+shift+b で実行できます!
落ちるボールをキャッチするゲームを作ります!
今週の課題
今回もB-9-1まで必須提出
B-9-2は応用問題 (Sを取りたい方)
次回授業で「リスト」を教わればゲームを作るための主要な技術要素は終わり!
そろそろネタぎめを是非進めましょう